<?php
/**
 * Created by PhpStorm.
 * User: zhangrxiang
 * Date: 2017/7/4
 * Time: 21:45
 */

function BubbleSort( $str ) //定义一个名为BubbleSort的函数，它有一个参数叫$str,这个参数必须是一个数组，这个数组里包含需要排序的一系列字符。
{
	for ( $i = 0; $i < count( $str ); $i ++ ) //count($str)的功能为统计数组中的元素数量，并返回这个数量值
//第一层循环，外层循环，由于冒泡排序的原理为，每次都找最小（或每次都找最大，本例是演示每次都找最小的情况）的那个字符，找出一个最小（“大”）的字符算一次循环
	{
		for ( $j = count( $str ) - 2; $j >= $i; $j -- ) //内层循环，本次循环控制找最小（“大”）数的操作，由于每次要找出最大的数，必须拿一个数和每一个数对比，所以也是一个内层的循环操作
		{
			if ( $str[ $j + 1 ] < $str[ $j ] ) //比较，是$j+1位置的字符大，还是$j位置的字符比较大,如果$j位置的字符比较大，那么交换$str[$j+1]和$str[$j]以保证排列在前面的字符更小
			{
				$tmp           = $str[ $j + 1 ]; //交换两个位置的东西，需要三个空位才能完成，就像交换一杯可乐和一杯牛奶需要另一个空杯子一样，$tmp可以说就是空杯子
				$str[ $j + 1 ] = $str[ $j ];//类似，有一杯牛奶，一杯可乐，我们想用牛奶杯装可乐，可乐杯装牛奶的话，就得进行这样的操作……
				$str[ $j ]     = $tmp;//整个交换的过程可以描述为：先将牛奶倒入空杯，再将可乐倒入牛奶杯，然后再将原来空杯里的牛奶倒入可乐杯
			}
		}//内层循环每执行一次，就会多找出一个“最小”的字符（除了前面循环中已经找过了的）
	}//数组里有N个字符的话，循环就重复N-1次，这样才能完成排序
	return $str; //将排序后的结果返回，返回后跳出函数体，$str变量在内存中消失，而BubbleSort($str)的值就是$str所返回的值
}//函数体定义完成标志我们称之为 end of function BubbleSort($str)
$str = array( 3, 6, 1, 5, 9, 0, 4, 6, 11 );//组出一个存放随机序列的若干数字的数组
print_r( BubbleSort( $str ) ); //调用函数体